// Copyright  2012 Petr TALLA. [petr.talla@gmail.com]
// This file is free software; you can redistribute it and/or modify it
// under the terms of the GNU Lesser General Public License
// as published by the Free Software Foundation; either
// version 2 of the License, or (at your option) any later version.
//
// This file is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY;  without even the implied warranty
// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
// See the GNU Lesser General Public License for more details.
// [http://www.gnu.org/copyleft/lesser.html]
//=============================================================================
package tc.common.registry;

import java.util.Vector;


public class Obj {
	public enum State {CURRENT, NEW, CHANGED, DELETED}
	public static int maxid = 0;
	public int obid = maxid++;
	public State state = State.NEW;
	public Vector<Ref> refs = new Vector<Ref>();
	
	public Obj() {
		RegistrySys.registry.objects.put(obid, this);
		RegistrySys.registry.changed.add(this);
	}
	
	public void objChanged() {
		if (state != State.CURRENT) return;
		
		state = State.CHANGED;
		RegistrySys.registry.changed.add(this);
		
		RegistrySys.registry.lock();
		RegistrySys.registry.unlock();
	}
	
	@SuppressWarnings("static-access")
	public void objDeleted() {
		if (state == State.NEW) {
			RegistrySys.registry.changed.remove(this);
			return;
		}
		
		state = state.DELETED;
		
		for (int i = 0; i < refs.size(); i++) {
			refs.get(i).onChanged();
		}
	}
	
	public void sendChangedMsg() {
		for (int i = 0; i < refs.size(); i++) {
			refs.get(i).onChanged();
		}
	}
}
